home *** CD-ROM | disk | FTP | other *** search
/ Enter 2004 January / enter-2004-01.iso / files / maxima-5.9.0.exe / {app} / share / maxima / 5.9.0 / src / zero.lisp < prev   
Encoding:
Text File  |  2003-02-09  |  3.0 KB  |  85 lines

  1. ;;; -*-  Mode: Lisp; Package: Maxima; Syntax: Common-Lisp; Base: 10 -*- ;;;;
  2. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  3. ;;;     The data in this file contains enhancments.                    ;;;;;
  4. ;;;                                                                    ;;;;;
  5. ;;;  Copyright (c) 1984,1987 by William Schelter,University of Texas   ;;;;;  
  6. ;;;     All rights reserved                                            ;;;;;
  7. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  8. ;;;     (c) Copyright 1982 Massachusetts Institute of Technology         ;;;
  9. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  10.  
  11. (in-package "MAXIMA")
  12. (macsyma-module zero)
  13.  
  14. (declare-top (SPECIAL
  15.           ;S VAR  V1 V R1 R2 ;; added declares
  16.           #-cl EXP ;I don't think exp is necessary--wfs
  17.           $NUMER $LISTCONSTVARS VARLIST GENVAR)
  18.      (*LEXPR $RAT))
  19.  
  20. (DEFMFUN $ZEROEQUIV (EXP VAR)
  21.        (declare (special var ))
  22.        (PROG (R S V VARLIST GENVAR)
  23.          (declare (special S V))
  24.          (SETQ EXP (SPECREPCHECK EXP))
  25.          (SETQ R (LET ($LISTCONSTVARS) ($LISTOFVARS EXP)))
  26.          (IF (AND (CDR R) (OR (CDDR R) (NOT (ALIKE1 (CADR R) VAR))))
  27.          (RETURN '$DONTKNOW))
  28.          (SETQ EXP ($EXPONENTIALIZE EXP))
  29.          (SETQ R (SDIFF EXP VAR))
  30.          (IF (ISINOP R '%DERIVATIVE) (RETURN '$DONTKNOW))
  31.          ($RAT R)
  32.          (SETQ R ($RAT EXP))
  33.          (SETQ S (CAR R))
  34.          (SETQ V (RATNUMERATOR (CDR R)))
  35.          (RETURN (ZEROEQUIV1 V))))
  36.  
  37. (DEFUN ZEROEQUIV1 (V)
  38.   (declare (special var v s))
  39.        (PROG (V1 V2 COEFF DEG)
  40.          (declare (special V1 V2))
  41.          (IF (ATOM V) (RETURN (EQUAL V 0)))
  42.    COEFFLOOP (IF (NULL (CDR V)) (RETURN T))
  43.              (SETQ DEG (CADR V))
  44.          (IF (EQUAL DEG 0) (RETURN (ZEROEQUIV1 (CADDR V))))
  45.          (SETQ COEFF (CADDR V))
  46.          (WHEN (ZEROEQUIV1 COEFF)
  47.            (SETQ V (CONS (CAR V) (CDDDR V)))
  48.            (GO COEFFLOOP))
  49.          (SETQ V1 ($RAT (SDIFF (RATDISREP (CONS S (CONS V (CADDR V))))
  50.                    VAR)))
  51.          (SETQ V2 (CADR ($RAT (RATDISREP V1))))
  52.          (IF (EQUAL (PDEGREE V2 (CAR V)) (CADR V))
  53.          (RETURN (ZEROEQUIV2 V)))
  54.          (IF (LESSP (PDEGREE V2 (CAR V)) (CADR V))
  55.          (RETURN (IF (ZEROEQUIV1 V2) (ZEROEQUIV2 V))))
  56.          (RETURN '$DONTKNOW)))
  57.  
  58. (DEFUN ZEROEQUIV2 (V)
  59.        (declare (special var v s))
  60.        (PROG (R R1 R2)
  61.          (declare (special r1 r2))
  62.          (SETQ R (SIN (TIMES 0.001 (RANDOM 1000.))))
  63.          (SETQ V (MAXIMA-SUBSTITUTE R VAR (RATDISREP (CONS S (CONS V 1)))))
  64.          (SETQ V (MEVAL '(($EV) V $NUMER)))
  65.          (COND ((AND (NUMBERP V) (LESSP (ABS V) (TIMES R 0.01)))
  66.             (RETURN T))
  67.            ((NUMBERP V) (RETURN NIL)))
  68.          (IF (AND (FREE V '$%I) (NOT (ISINOP V '%LOG)))
  69.          (RETURN '$DONTKNOW))
  70.          (SETQ R1 ($REALPART V))
  71.          (SETQ R1 (MEVAL '(($EV) R1 $NUMER)))
  72.          (IF (NOT (NUMBERP R1)) (RETURN '$DONTKNOW))
  73.          (SETQ R2 ($IMAGPART V))
  74.          (SETQ R2 (MEVAL '(($EV) R2 $NUMER)))
  75.          (IF (NOT (NUMBERP R2)) (RETURN '$DONTKNOW))
  76.          (COND ((AND (LESSP (ABS R1) (TIMES R 0.01))
  77.              (LESSP (ABS R2) (TIMES R 0.01)))
  78.             (RETURN T))
  79.            (T (RETURN NIL)))))
  80.  
  81.  
  82.  
  83.  
  84.  
  85.